from flask import get_flashed_messages, request, flash, render_template, redirect, url_for, session
from models.proyecto import metadata, Proyecto
from models.database import db_session
import sys
#import bz2

from models.proyectoManager import ProyectoManager
from models.rolManager import RolManager
from models.fase import Fase
from models.comite import Comite

proyectoMgr = ProyectoManager()
rolMgr = RolManager()

"""
Clase que contiene los metodos de consultas del Modulo de Administracion
"""

def consultas():
    """ Metodo encargado de la busqueda de proyectos a partir de un filtro """
    filtro=""
    if request.method == "POST":
        if request.form["operacion"] != "":
            operacion = request.form["operacion"]
            idproyecto = request.form["idproyecto"]
            return redirect(url_for(operacion, idproyecto=idproyecto)) 
        else:
            idproyecto = request.form["idproyecto"]
            return render_template("consultas.html", idproyecto=idproyecto)
    if request.method == "GET":    
        if session['idproyecto']:
            idproyecto = session['idproyecto']
            proyecto = proyectoMgr.getProyecto(idproyecto)
            return render_template("consultas.html", proyecto= proyecto, idproyecto= idproyecto)
        else:
            flash(u"Seleccionar un proyecto antes de realizar la operaci\u00f3n", "error")
            return redirect(url_for("configurarProyecto", action = "consultas"))

def consultarRolesDelProyecto():
    """ Metodo encargado de consultar los roles de un proyecto """
    
    if request.method == "GET":
        idproyecto = request.args.getlist("idproyecto")[0]
        roles = proyectoMgr.getRolesDelProyecto(idproyecto)
        return render_template("consultarRolesDelProyecto.html", roles= roles, idproyecto = idproyecto)
    return redirect(url_for("consultas"))

def consultarUsuariosDelProyecto():
    """ Metodo encargado de consultar los usuarios de un proyecto """
    
    if request.method == "GET":
        idproyecto = request.args.getlist("idproyecto")[0]
        usuarios = proyectoMgr.getUsuariosDelProyecto(idproyecto)
        return render_template("consultarUsuariosDelProyecto.html", usuarios = usuarios, idproyecto = idproyecto)
    return redirect(url_for("consultas"))

def consultarRolesPorUsuario():
    """ Metodo encargado de consultar los roles de un usuario """
    
    if request.method == "GET":
        idproyecto = request.args.getlist("idproyecto")[0]
        usuarios = usuarioMgr.getRolesDelProyecto(idproyecto)
        return render_template("consultarPermisosPorRol.html", roles= roles, idproyecto = idproyecto)
    if request.method == "POST":
        if request.form["idusuario"]:
            idproyecto = request.form["idproyecto"]
            idrol = request.form["idrol"]
            rol = rolMgr.getRol(idrol)
#           permisos = rolMgr.getPermisosDelRol(idrol)
            permisos = rol.permisos
            roles = proyectoMgr.getRolesDelProyecto(idproyecto)
            return render_template("consultarPermisosPorRol.html", roles= roles, idproyecto = idproyecto, rol= rol, permisos = permisos)
        return redirect(url_for("consultas", idproyecto = request.form["idproyecto"]))

def consultarUsuariosPorRol():
    """ Metodo encargado de consultar los usuarios de un rol """
    
    if request.method == "GET":
        idproyecto = request.args.getlist("idproyecto")[0]
        roles = proyectoMgr.getRolesDelProyecto(idproyecto)
        return render_template("consultarUsuariosPorRol.html", roles= roles, idproyecto = idproyecto)
    if request.method == "POST":
        if request.form["idrol"]:
            idproyecto = request.form["idproyecto"]
            idrol = request.form["idrol"]
            rol = rolMgr.getRol(idrol)
#             permisos = rolMgr.getPermisosDelRol(idrol)
            usuarios = rol.usuarios
            roles = proyectoMgr.getRolesDelProyecto(idproyecto)
            return render_template("consultarUsuariosPorRol.html", roles= roles, idproyecto = idproyecto, rol= rol, usuarios = usuarios)
        return redirect(url_for("consultas", idproyecto = request.form["idproyecto"]))


def consultarPermisosPorRol():
    """ Metodo encargado de consultar los permisos de un rol """
    
    if request.method == "GET":
        idproyecto = request.args.getlist("idproyecto")[0]
        roles = proyectoMgr.getRolesDelProyecto(idproyecto)
        return render_template("consultarPermisosPorRol.html", roles= roles, idproyecto = idproyecto)
    if request.method == "POST":
        if request.form["idrol"]:
            idproyecto = request.form["idproyecto"]
            idrol = request.form["idrol"]
            rol = rolMgr.getRol(idrol)
#             permisos = rolMgr.getPermisosDelRol(idrol)
            permisos = rol.permisos
            roles = proyectoMgr.getRolesDelProyecto(idproyecto)
            return render_template("consultarPermisosPorRol.html", roles= roles, idproyecto = idproyecto, rol= rol, permisos = permisos)
        return redirect(url_for("consultas", idproyecto = request.form["idproyecto"]))

 